/**
 * 数值的扩展
 * es6
 * 二进制 0B
 * 八进制 0O
 
Number.parseInt()
Number.parseFloat()
Number.isInteger()

Math
 */

 // es5 十进制转二进制
 const a = 11  
 console.log(a.toString(2)) // 1011
 console.log(a.toString(8)) // 13
 console.log(a.toString(16)) // b

const b = 1011
 // 二进制转十进制
console.log(parseInt(b, 2)) // 按二进制转换

// es6
const a1 = 0B01011 // 二进制表示
console.log(a1)   // 11

const b1 = 0O13 // 八进制表示
console.log(b1) 

console.log(Number.isFinite(5 / 0)) // false 
console.log(Number.isNaN('a' / 5))  // true

// 数字二进制存储, IEEE 754 双精度标准
console.log(0.1 + 0.2 === 0.3)   // false

/**
 * 35 -> 00100011
 * 0.375 -> 0.011
 * 0.1 -> 0.000110011...
 */
console.log(0.10000000000000001 === 0.1) // true

// 整数最大值
const max = Math.pow(2, 53)
console.log(max) // 9007199254740992
console.log(max + 1)
console.log(Number.MAX_SAFE_INTEGER)
console.log(Number.isSafeInteger(max))

// 去除小数
console.log(Math.trunc(3.3))
console.log(Number.parseInt(3.3))
console.log(Math.trunc(true))     // 1
console.log(Number.parseInt(true))// NaN

// 判断正负数
console.log(Math.sign(-1))   // -1
console.log(Math.sign(NaN))   // NaN
console.log(Math.sign(true))   // 1

// 立方根
console.log(Math.cbrt(8)) // 2